package com.ebei.admin.controller;

import com.ebei.common.constant.CommonConstant;
import com.ebei.common.util.Result;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.ui.Model;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.WebRequest;

import java.util.Date;

/**
 * 原本应该放在ebei-common下,com.ebei.common.web下
 */
@ControllerAdvice
public class ApplicationControllerAdvisor {

    /**
     * 所有映射路径方法的错误统一处理
     *
     * @param e
     * @param request
     * @return
     */
    @ExceptionHandler(value = RuntimeException.class)//对所有异常捕获,并进行处理
    @ResponseBody
    public Result<Object> applicationExceptionHandler(Exception e, WebRequest request) {
        e.printStackTrace();
        return new Result(Result.FAIL, e.getLocalizedMessage());
    }

    /**
     * 所有映射路径方法都能访问如下方法中的值,,而且比@RequestMapping方法,先执行
     *
     * @param model
     */
    @ModelAttribute
    public void applicationModelAttribute(Model model, WebRequest request) {

    }

    /**
     * 数据绑定可以进行操作,,比如日期的转换
     *
     * @param WebDataBinder
     */
    @InitBinder
    public void initBinder(WebDataBinder WebDataBinder) {
        //对前端参数统一处理  ..以后加入
        WebDataBinder.registerCustomEditor(Date.class, new CustomDateEditor(CommonConstant.Y2S, false));
        WebDataBinder.setDisallowedFields("_t");
    }
}
